package com.class05;

/**
 * @ClassDescription: 测试基本类型变量间的运算规则
 * 1.这里提到的可以做运算的基本数据类型有7种，不包含boolean
 * 2.运算规则包括：
 * 1）自动类型提升
 * 2）强制类型转换
 * 3.此VariableTest4.java用来测试自动类型提升
 * 规则：当容量小的变量与容量大的变量运算时，结果自动转为容量大的数据类型
 * 从小大：byte -> short -> char ->int ->float  -> long -> double
 * todo 特别的：byte、short、char类型的变量之间运算，结果为int类型
 * 说明：此时的容量小或大，并非指占用内存空间的大小，而是指表示数据的范围大小
 * @JdkVersion: 17
 * @Author: yxy
 * @Created: 2023/12/26 10:37
 */
public class VariableTest4 {
    public static void main(String[] args) {
        int i1 = 10;
        int i2 = i1;
        long l1 = i1;
        //编译不通过
//        byte b1 = i1;
        byte b1 = 12;
        int i3 = i1 + b1;
        double d1 = i1;
        System.out.println(i3);
//        特殊的情况1：byte、short之间的运算
        byte b2 = 12;
        short s1 = 10;
//        编译不通过
//        short s2 = b2 + s1;
        i3 = b2 + s1;
        char c1 = 'a';
//        特殊情况2：char
//        编译不通过
//        char c2 = c1 +b2;
        i3 = c1 + b2;


//        练习1：
        long l3 = 123123L;
        long l2 = 123123;//理解为：自动类型提升（int -> long）


//        long l4 = 1231231223123;//理解为int类型，因为超出了int范围，所以报错
        long l5 = 1231231223123l;//此时的1231231223123L就是使用8字节存储的long类型的值

//        练习2：
        float f1 = 12.3f;
//        编译不通过
//        float f2 = 12.3;//不满足自动类型提升的规则（double -> float）.所以报错

//        练习3：
//        规定1：整型常量，规定是int类型
        byte b5 = 10;
//        byte b6 = b5 + 1;
        int ii1 = b5 + 1;
//        规定2：浮点型常量，规定是double类型
        double ddd =  b5 +  12.3;
//        练习4：说明为什么不允许变量名是数字开头的，为了“自恰”
//        int 123L = 123;
//        long l6 = 123L;
//        123L + l6;

    }
}
